Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
¿Cuál es el propósito de las opciones "-i" y "-t" para el comando "docker exec"?

Para ser honesto, siempre me ha confundido docker exec -it … , docker exec -i … y docker exec -t … , así que decido hacer una prueba:

  1. docker exec -it … :

     # docker exec -it 115c89122e72 bash root@115c89122e72:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

    Funciona normalmente.

  2. docker exec -i … :

     # docker exec -i 115c89122e72 bash ^C

    El comando se cuelga y tengo que usar Ctl + c para interrumpirlo.

  3. docker exec -t … :

     # docker exec -t 115c89122e72 bash root@115c89122e72:/# ls ^C

    Entra en el contenedor con éxito, pero se bloquea al ejecutar el primer comando.

Así que parece que no tiene sentido tener los comandos docker exec -i … y docker exec -t … ¿Alguien podría explicar por qué existen las opciones -i y -t para el comando docker exec ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

-i , --interactive mantiene STDIN abierto incluso si no está adjunto, lo que necesita si desea escribir cualquier comando.

-t , --tty un pseudo-TTY, un pseudo terminal que conecta el "terminal" de un usuario con stdin y stdout. (Ver container/container.go )

Si hace un eco, solo se necesita -t .
Pero para una sesión interactiva en la que ingresa entradas, necesita -i .

Dado que -i mantiene abierta la entrada estándar, también se usa para canalizar la entrada a un contenedor acoplable separado. Eso funcionaría incluso con -d (separar).
Consulte " ¿Cuándo usaría --interactive sin --tty en un contenedor Docker? ":

 $ echo hello | docker run -i busybox cat hello

-i STDIN abierto incluso si no está conectado, ¿cuál es el estado de STDOUT en este caso?

Es, para docker exec , el establecido por docker run .

Pero, con respecto a docker exec , hay un problema actual ( problema 8755: Docker tty no es un tty con docker exec

desafortunadamente, su descubrimiento solo equivale a una diferencia entre el comportamiento de tty en centos6 frente a ubuntu: 14.04. Todavía no hay un tty funcional dentro del exec: solo haga ls -la /proc/self/fd/0 y vea que es un enlace roto que apunta a un pts que no existe.

el error real con el que estamos lidiando es que ciertas bibliotecas estándar asumen que los enlaces simbólicos en /proc/self/fds/ deben ser enlaces simbólicos válidos

El problema es que el tty se crea fuera del host y no hay ninguna referencia a él en el contenedor, como la configuración de /dev/console en el contenedor principal.
Una opción para solucionar esto sería asignar y montar los devpts del host en los contenedores.

Nota (cuarto trimestre de 2017): esto ya debería estar solucionado (docker 17.06-ce) .
Ver PR 33007 .

Ese PR ahora permite (desde el 17.06):

 zacharys-pro:dev razic$ docker run --rm -t -d ubuntu bash 83c292c8e2d13d1b1a8b34680f3fb95c2b2b3fef71d4ce2b6e12c954ae50965a zacharys-pro:dev razic$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 83c292c8e2d1 ubuntu "bash" 2 seconds ago Up 1 second xenodochial_bardeen zacharys-pro:dev razic$ docker exec -ti xenodochial_bardeen tty /dev/pts/1

(antes del 17.06, tty devolvía " not a tty ")

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!